import { loginApi, getUserInfoApi, getBaseUserInfoApi } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {

  token: getToken() || '',
  userInfo: {}
}

const getters = {}
// 方法
// 调用方法commit
const mutations = {
  setToken(state, newToken) {
    setToken(newToken)
    state.token = newToken
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 1. 删除token
  // 2.清除用户信息
  // 3.跳转登录页
  logout(state) {
    state.token = ''
    // 清除vuex token的同时, 同步到本地cookies中移出
    removeToken()
    state.userInfo = {}
    // 退出的时候清空路由对象中的路由规则
    resetRouter()
  }
}
// 模块
// 可以用this.$store.dispatch('user/login'),...mapActions('user', ['login']),来调用接口
const actions = {
  // 调登陆接口
  login(store, loginForm) {
    return new Promise((resolve, reject) => {
      // 发送登录请求, 异步操作
      loginApi(loginForm).then(res => {
        // console.log(res)
        const token = res.data
        store.commit('setToken', token)
        // 成功resolve
        resolve(res)
      }).catch(err => {
        // console.log(error)
        // 失败reject
        reject(err)
      })
    })
  },
  async getUserInfo(store) {
    const res = await getUserInfoApi()
    // console.log(res)
    const res2 = await getBaseUserInfoApi(res.data.userId)
    // console.log(res2)
    res2.data.staffPhoto = 'http:/www.baidu.com'
    const baseData = {
      ...res.data,
      ...res2.data
    }
    store.commit('setUserInfo', baseData)
    // return 的目的 为八天后权限使用
    return baseData
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}
